#include<stdio.h>
#include<unistd.h>
#include<string.h>
#include<stdlib.h>
#include<sys/types.h>

int main()
{
    pid_t ret = fork();
    if(ret < 0)
    {
        //创建子进程失败
        perror("fork");
        exit(1);//子进程创建失败，结果错误，终止进程
    }

    else if(0 == ret)
    {
        //子进程
        int cur = 5;
        while(cur)
        {
            printf("Cur:%d  我是子进程! Pid:%d  PPid:%d\n",cur, getpid(), getppid());
            sleep(1);
            cur--;
           // int *p = NULL;//测试子进程崩溃
           // *p = 99;
        }
        exit(10);//终止子进程，返回码设置成10
    }

    else 
    {
            int status = 0;
            printf("我是父进程! Pid:%d  PPid:%d\n",getpid(), getppid());
            pid_t res = wait(&status);
           //  pid_t res = waitpid(-1,&status,0);
            if(ret > 0)
            {
                printf("等待子进程成功! res:%d status:%d 信号码:%d\n",res,(status >> 8) & 0xff, status & 0x7f);
                //status是一个输出型参数，os会向里填入一个位处理后的数，通过不同的解码可以分别取出：退出码和信号码。
            }

        //父进程
       // while(1)
       // {
       //     printf("我是父进程! Pid:%d  PPid:%d\n",getpid(), getppid());
       //     sleep(1);
       // }
    }
}









//int sum(int x)
//{
//    int r_sum = 0;
//    int i = 1;
//    for(; i<x; i++)
//    {
//        r_sum += i;
//    }
//    return r_sum;
//}
//
//int main()
//{
//    printf("你是否看得见我？");
//    sleep(3);
//    exit(333);
//    printf("hello linux!\n");
//    printf("hello linux!\n");
//    exit(111);
//    printf("hello linux!\n");
//    printf("hello linux!\n");
//    printf("hello linux!\n");

   // int i = 0;
   // for(; i<=134; i++)
   // {
   //     printf("序号：%d 错误码：%s\n", i, strerror(i));
   // }
  //  int flag = 0;
  //  printf("hello linuxx! Pid:%d  PPid:%d\n",getpid(),getppid());
  //  int res = sum(100);
  //  if(5050 != res)
  //  {
  //      flag = 1;
  //  }
  //  return flag;
//}
